package com.nomi.blog.utils;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;

public class JwtUtils {
    /**
     * 生成JWT Token
     * @param userId 用户ID
     * @param secret 密钥
     * 密钥是JWT的加密密钥，用于对JWT进行签名，确保JWT的完整性和真实性。
     */
    public static String generateToken(Long userId,String secret){
        // 创建JWT
        return Jwts.builder()
                .setSubject(userId.toString())  // 设置主题，这里为用户ID
                .setIssuedAt(new Date())        // 设置签发时间
                .setExpiration(new Date(System.currentTimeMillis() + 86400000L))    // 设置过期时间，这里设置为一天24小时
                .signWith(SignatureAlgorithm.HS256,secret)  //  使用HS256算法和密钥生成JWT
                .compact(); // 生成JWT字符串
    }

    /**
     * 解析JWT Token 获取用户ID
     */
    public static Long getUserId(String token,String secret){
        try{
            Claims claims = Jwts.parser() // 解析JWT
                    .setSigningKey(secret) // 设置密钥
                    .parseClaimsJws(token)  // 设置密钥
                    .getBody(); //  获取JWT中的数据
            return Long.parseLong(claims.getSubject()); //  获取用户ID
        } catch (Exception e){
            return null;
        }
    }
}
